﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Mail;
using System.Xml;

namespace TangoFamilyAndGuide.RN
{
    public class Publicidad
    {
        public static List<Entidades.Publicidad> LeerListaPublicidadesPorUsuario(Entidades.Sesion Sesion)
        {
            DB.Publicidad db = new DB.Publicidad(Sesion);
            return db.LeerListaPublicidadesPorUsuario();
        }
        public static void Leer(Entidades.Publicidad Publicidad, Entidades.Sesion Sesion)
        {
            DB.Publicidad db = new DB.Publicidad(Sesion);
            db.Leer(Publicidad);
        }
        public static void Crear(out int IdPublicidad, Entidades.Publicidad Publicidad, Entidades.Sesion Sesion)
        {
            DB.Publicidad db = new DB.Publicidad(Sesion);
            Publicidad.WF.Estado = "Active";
            IdPublicidad = db.Crear(Publicidad);
        }
        public static void Modificar(Entidades.Publicidad PublicidadActual, Entidades.Publicidad Publicidad, Entidades.Sesion Sesion)
        {
            DB.Publicidad db = new DB.Publicidad(Sesion);
            db.Modificar(PublicidadActual, Publicidad);
        }
        public static void CambiarEstado(Entidades.Publicidad Publicidad, string Evento, string Estado, Entidades.Sesion Sesion)
        {
            DB.Publicidad db = new DB.Publicidad(Sesion);
            db.CambiarEstado(Publicidad, Evento, Estado);
            Publicidad.WF.Estado = Estado;
        }
        public static Entidades.Publicidad ObtenerCopia(Entidades.Publicidad Desde)
        {
            Entidades.Publicidad hasta = new Entidades.Publicidad();
            hasta.Catalogo = Desde.Catalogo;
            hasta.Id = Desde.Id;
            hasta.ImageUrl = Desde.ImageUrl;
            hasta.NavigateUrl = Desde.NavigateUrl;
            hasta.AlternateText = Desde.AlternateText;
            hasta.WF.Estado = hasta.WF.Estado;
            hasta.Impression = Desde.Impression;
            hasta.Keyword = Desde.Keyword;
            hasta.Usuario.Id = Desde.Usuario.Id;
            return hasta;
        }
        public static List<Entidades.Publicidad> Lista(out int CantidadFilas, int IndicePagina, int TamañoPagina, string OrderBy, string ImageUrl, string NavigateUrl, string SessionID, Entidades.Sesion Sesion)
        {
            List<Entidades.Publicidad> listaPublicidad = new List<Entidades.Publicidad>();
            DB.Publicidad db = new DB.Publicidad(Sesion);
            if (OrderBy.Equals(String.Empty))
            {
                OrderBy = "IdPublicidad desc";
            }
            listaPublicidad = db.ListaCompleta(OrderBy, ImageUrl, NavigateUrl);
            int cantidadFilas = listaPublicidad.Count;
            CantidadFilas = cantidadFilas;
            return db.Lista(IndicePagina, TamañoPagina, OrderBy, SessionID, listaPublicidad);
        }
        public static List<Entidades.Publicidad> ListaCompleta(out int CantidadFilas, string OrderBy, string ImageUrl, string NavigateUrl, string SessionID, Entidades.Sesion Sesion)
        {
            List<Entidades.Publicidad> listaPublicidad = new List<Entidades.Publicidad>();
            DB.Publicidad db = new DB.Publicidad(Sesion);
            if (OrderBy.Equals(String.Empty))
            {
                OrderBy = "IdPublicidad desc";
            }
            listaPublicidad = db.ListaCompleta(OrderBy, ImageUrl, NavigateUrl);
            int cantidadFilas = listaPublicidad.Count;
            CantidadFilas = cantidadFilas;
            return listaPublicidad;
        }
        public static void EventoPosible(out Entidades.Evento Evento, Entidades.Publicidad Publicidad, Entidades.Sesion Sesion)
        {
            //Verificar si el usuario es administrador
            Evento = new Entidades.Evento();
            List<Entidades.Permiso> permisoAdminSITEActive = Sesion.Usuario.Permisos.FindAll(delegate(Entidades.Permiso p)
            {
                return p.TipoPermiso.Id == "AdminSITE" && p.Estado == "Active";
            });
            if (permisoAdminSITEActive.Count == 0)
            {
                Evento.Id = "";
                Evento.DescrEvento = "In this state there is no event available. Only the Site Manager can intervene.";
                Evento.Accion = "";
                Evento.EstadoHst = "";
            }
            else
            {
                if (Publicidad.Estado == "CanceledAdmin")
                {
                    Evento.Id = "Undo Cancel (Admin)";
                    Evento.DescrEvento = "Undo Cancel (Admin)";
                    Evento.Accion = "Undo Cancel (Admin)";
                    Evento.EstadoHst = "Active";
                }
                else if (Publicidad.Estado == "Active")
                {
                    Evento.Id = "Cancel (Admin)";
                    Evento.DescrEvento = "Cancel (Admin)";
                    Evento.Accion = "Cancel (Admin)";
                    Evento.EstadoHst = "CanceledAdmin";
                }
                else
                {
                    Evento.Id = "";
                    Evento.DescrEvento = "In this state there is no event available.";
                    Evento.Accion = "";
                    Evento.EstadoHst = "";
                }
            }
        }
        public static void Eliminar(Entidades.Publicidad Publicidad, Entidades.Sesion Sesion)
        {
            DB.Publicidad db = new DB.Publicidad(Sesion);
            db.Eliminar(Publicidad);
        }
        public static void CrearArchivoXML(List<Entidades.Publicidad> Publicidad, string Path, string Arch, Entidades.Sesion Sesion)
        {
            XmlWriter xwrite = XmlWriter.Create(Path + Arch);
            xwrite.WriteStartDocument();
            xwrite.WriteStartElement("Advertisements");
            for (int i = 0; i < Publicidad.Count; i++)
            {
                xwrite.WriteStartElement("Ad");
                xwrite.WriteElementString("ImageUrl", "~/ImagenesPublicidad/" + Publicidad[i].Catalogo +  "/" + Publicidad[i].ImageUrl.ToString());
                xwrite.WriteElementString("Width", "230");
                xwrite.WriteElementString("NavigateUrl", Publicidad[i].NavigateUrl.ToString());
                xwrite.WriteElementString("AlternateText", Publicidad[i].AlternateText.ToString());
                xwrite.WriteElementString("Impressions", Publicidad[i].Impression.ToString());
                xwrite.WriteElementString("Keyword", Publicidad[i].Keyword.ToString());
                xwrite.WriteEndElement();
            }
            xwrite.WriteEndElement();
            xwrite.WriteEndDocument();
            xwrite.Close();
        }
    }
}
